package com.sugon.dao;

import com.sugon.entity.DevAmPlanPreviewEntity;
import com.sugon.modules.device.model.dto.DevMaintenancePreviewItemDTO;
import com.sugon.modules.device.model.vo.DevMaintenancePlanItemDetailVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

/**
 * 设备维护计划预览明细表Dao
 *
 * @author sugon
 * @date 2020-11-04 15:58:36
 */
public interface DevAmPlanPreviewDao {

    /**
     * 查询设备维护计划项参与制定工单项的条数
     *
     * @param devMainItemId 设备维护项ID
     * @return
     */
    @Select("SELECT COUNT(*) FROM DEV_AM_PLAN_PREVIEW WHERE DEV_MAIN_ITEM_ID = #{devMainItemId}")
    int countDevMainItemId(@Param("devMainItemId") String devMainItemId);

    /**
     * 删除执行维护计划的预览数据
     *
     * @param planId 维护计划ID
     * @return
     */
    int deleteByPlanId(@Param("planId") String planId, @Param("devId") String devId, @Param("devMainItemIdList") List<String> devMainItemIdList, @Param("weeksOfYear") Integer weeksOfYear);

    /**
     * 删除执行维护计划的预览数据
     * @param planId 维护计划ID
     * @param yearly 年度
     * @param excludeWeeklySet 周次
     * @return
     */
    int conditionDelete(@Param("planId") String planId, @Param("yearly") Integer  yearly, @Param("excludeWeeklySet") Set<Integer> excludeWeeklySet);

    /**
     * 查询指定年度周次的维护计划预览项
     * 需要确保设备处于完好可用的状态
     *
     * @param yearly      年度
     * @param weeksOfYear 周次
     * @param planStatus  计划状态
     * @return
     */
    List<DevMaintenancePreviewItemDTO> queryWeeksOfYearPreviewItems(@Param("yearly") Integer yearly, @Param("weeksOfYear") Integer weeksOfYear, @Param("planStatus") Integer planStatus);

    /**
     * 保存
     *
     * @param t
     * @return
     */
    int save(DevAmPlanPreviewEntity t);

    /**
     * 删除指定年份的设备维护计划实施项明细
     *
     * @param yearly 年份
     * @return
     */
    int delete(@Param("yearly") Integer yearly);

    /**
     * 找出设备和维护项中预览记录,按照周次降序排列
     *
     * @param devId         设备ID
     * @param devMainItemId 设备维护项ID
     * @return
     */
    List<DevAmPlanPreviewEntity> getPlanPreviewList(@Param("devId") String devId, @Param("devMainItemId") String devMainItemId);

    /**
     * 根据设备维护计划ID列表获取维护计划详情LIST
     * 维护计划项必须是有效的
     *
     * @param planIdList 计划ID列表
     * @return
     */
    List<DevMaintenancePlanItemDetailVO> getByPlanIds(@Param("planIdList") List<String> planIdList);

}
